package br.com.divulgaqui.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.divulgaqui.client.ValorEspecificacaoServiceBeanLocal;
import br.com.divulgaqui.client.exception.EntityIgualException;
import br.com.divulgaqui.entity.Especificacao;
import br.com.divulgaqui.entity.ValorEspecificacao;

import com.ocpsoft.pretty.faces.annotation.URLMapping;
import com.ocpsoft.pretty.faces.annotation.URLMappings;

@ManagedBean
@ViewScoped
@URLMappings(mappings={
		  @URLMapping(id = "especificacaoModelo", pattern = "/admin/modelo/especificacao-modelo", viewId = "/admin/modelo/especificacaoModelo.jsf")
		})
public class ValorEspecificacaoManagedBean extends BaseBean{	
	
	private static final long serialVersionUID = 1L;
	
	private ValorEspecificacao valorEspecificacao;
	private ValorEspecificacao valorEspecificacaoSelecionado;
	private List<ValorEspecificacao> valorEspecificacaos;	
	
	@EJB
	private ValorEspecificacaoServiceBeanLocal valorEspecificacaoServiceBeanLocal;
	
	public ValorEspecificacaoManagedBean(){
	}
	
	@PostConstruct
	public void init(){
		valorEspecificacao = new ValorEspecificacao();
		valorEspecificacaoSelecionado = new ValorEspecificacao();
		valorEspecificacaos = new ArrayList<ValorEspecificacao>();
	}
	
	/**
	 * Inclui um modelo
	 */
	public void salvar(){		
		try {			
			valorEspecificacaoServiceBeanLocal.salvar(valorEspecificacao);
			carregarValoresEspecificados();
			valorEspecificacao.setEspecificacao(new Especificacao());
			valorEspecificacao.setValor("");
			valorEspecificacao.setId(null);
			addMensagem(FacesMessage.SEVERITY_INFO, "Valor especificação", "Cadastrado com sucesso.");
		} catch (EntityIgualException e) {
			addMensagem(FacesMessage.SEVERITY_ERROR, "Valor especificação", "Especificação com valor "+valorEspecificacao.getValor()+" já foi adicionada ao modelo.");
		}
	}
	
	/**
	 * Exclui um valorEspecificacao
	 */
	public void excluir(){		
		valorEspecificacaoServiceBeanLocal.excluir(valorEspecificacaoSelecionado);
	}
	
	/**
	 * Exclui um valorEspecificacao e atulaiza a lista
	 */
	public void excluirAtualizarLista(){		
		excluir();
		carregarValoresEspecificados();
	}
	
	/**
	 * Atualiza um modelo
	 */
	public void atualizar(){//TODO validar erro no contextmenu			
		valorEspecificacaoServiceBeanLocal.atualizar(valorEspecificacaoSelecionado);
		addMensagem(FacesMessage.SEVERITY_INFO, "Valor especificação", "Atualizado com sucesso.");
	}
	
	public void carregarValoresEspecificados(){		
		valorEspecificacaos = valorEspecificacaoServiceBeanLocal.listar(valorEspecificacao);
	}	
	
	//====================== Get e Set ====================//
	
	public ValorEspecificacao getValorEspecificacao() {
		return valorEspecificacao;
	}

	public void setValorEspecificacao(ValorEspecificacao valorEspecificacao) {
		this.valorEspecificacao = valorEspecificacao;
	}

	public List<ValorEspecificacao> getValorEspecificacaos() {
		return valorEspecificacaos;
	}

	public void setValorEspecificacaos(List<ValorEspecificacao> valorEspecificacaos) {
		this.valorEspecificacaos = valorEspecificacaos;
	}

	public ValorEspecificacao getValorEspecificacaoSelecionado() {
		return valorEspecificacaoSelecionado;
	}

	public void setValorEspecificacaoSelecionado(
			ValorEspecificacao valorEspecificacaoSelecionado) {
		this.valorEspecificacaoSelecionado = valorEspecificacaoSelecionado;
	}
}
